package win.smartown.kotlin.`class`

//类也可以有二级构造函数，需要加前缀constructor
//class Computer{
//    constructor(brand:String){
//    }
//}

//如果类有主构造函数，每个二级构造函数都要，或直接或间接通过另一个二级构造函数代理主构造函数。
//在同一个类中代理另一个构造函数使用this关键字
class Computer(val brand: String) {

    constructor(brand: String, cpu: String) : this(brand) {}

    constructor(brand: String, cpu: String, disk: String) : this(brand, cpu) {}

}

//如果一个非抽象类内有声明构造函数（主构造函数或二级构造函数），它会产生一个没有参数的构造函数。
//构造函数是public的，如果不想类有public的构造函数，就得声明一个private主构造函数
//class Computer private constructor(brand: String) {
//
//}

//如果构造函数的所有参数都要默认值，编译器会生成一个无参的构造函数，这个构造函数会默直接使用默认值
//class Computer constructor(val brand: String = "Lenovo", cpu: String = "Intel Core i3")

//创建类的实例
fun main(args: Array<String>) {
    val companyPC = Computer("hp", "intel core i3", "500g hard disk")
    val homePC = Computer("aoc", "intel skylake g4500")
}